

package jumavidesktop.Persistencia.Dao.Implementaciones;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.EntityManager;
import jumavidesktop.Otros.Pojos.MyRespuesta;
import jumavidesktop.Otros.Pojos.consNamed;
import jumavidesktop.Persistencia.Dao.AbstractDAO;
import jumavidesktop.Persistencia.Dao.Interfaces.IDaoMatriculas;
import jumavidesktop.Persistencia.Dao.Interfaces.IDaoMovimientos;
import jumavidesktop.Persistencia.entidades.Matricula;
import org.apache.commons.lang.StringUtils;

/**
 *
 * @author vimso
 */
public class DaoMatriculas extends AbstractDAO<Matricula> implements IDaoMatriculas {
    
    IDaoMovimientos daoMovimientos= new DaoMovimientos(this.entityManager);

    public DaoMatriculas() {
        super();
    }

    
    public DaoMatriculas( EntityManager entityManager) {
        super(entityManager);
    }
    
    @Override
    public MyRespuesta verificarDatosMinimos(Matricula entidad) {
        //Tiene que tener usuario y el campo matricula
        MyRespuesta res= new MyRespuesta();
        
        if(StringUtils.isBlank(entidad.getMatricula())){
          res.addError("Debe indicar la matrícula");
        }
        
        if(StringUtils.isBlank(entidad.getUsuario().getDni())){
            res.addError("Debes indicar un usuario");
        }
        return res;
    }

    @Override
    public MyRespuesta verificarEntidadAlGuardar(Matricula entidad) {
        MyRespuesta respuesta = new MyRespuesta();
        //verifico los datos minimos y que no exita en la base de datos
        respuesta.agregarMyRespuesta(this.verificarDatosMinimos(entidad));
        
        if (respuesta.getTodoOK() && this.encuentraEntidad(entidad.getMatricula())!=null) {
            respuesta.addError("la matricula: "+entidad.getMatricula()+" ya existe en el sistema");
        }
        
        return respuesta;
    }
    @Override
    public MyRespuesta verificarEntidadAlModificar(Matricula entidad) {
        return this.verificarDatosMinimos(entidad);
    }

    @Override
    public MyRespuesta verificarEntidadAlEliminar(Matricula entidad) {
        //Existe en algún movimiento
        MyRespuesta respuesta= new MyRespuesta();
        //Obtengo los movimientos de esta matricula
        
        if (daoMovimientos.getMovimientosByMatricula(entidad).size()>0) {
            respuesta.addError("Hay movimienos de con la matrícula: "+ entidad.getMatricula());
        }
        
        return respuesta;
    }

    @Override
    protected Class getClase() {
        return Matricula.class;
    }

    @Override
    public boolean tieneRegistros() {
        return this.existenRegistros();
    }

    @Override
    public MyRespuesta guardarMatricula(Matricula entidad) {
        return this.agregarElemento(entidad);
    }

    @Override
    public MyRespuesta modificarMatricula(Matricula entidad) {
            return this.actualizarElemento(entidad);
    }

    @Override
    public Matricula encuentraEntidad(Object id) {
        return this.encuentraRegistro(Matricula.class, id);

    }

    @Override
    public MyRespuesta eliminarMatriculas(List<Matricula> entidad) {
            return this.eliminarElementos(entidad);
    }

    @Override
    public Matricula encuentraPorMatricula(String matricula) {
        
        consNamed parametors= new consNamed();
        parametors.setNamedQuery(Matricula.BUSCAR_POR_MATRICULA);
        Map<String, Object> parametro = new HashMap<String, Object>();
        parametro.put(Matricula.PA_BUSCAR_MATRICULA,matricula);
        parametors.setParametros(parametro);
        
        Matricula ma= new Matricula();
        try {
            if (true) {
                ma=this.consultaNMBBDD(parametors).get(0); //Como es una clave primaria sólo puede encontrar null o la entidad en si
            }
        } catch (Exception e) {
            int a=0;
            
        }
        return ma;
        
    }
    

}
